package model.proxy
{
	import model.AnneeEtude;
	import model.AnneeUniversitaire;
	import model.Enseignant;
	import model.Formation;
	
	import mx.rpc.events.FaultEvent;
	import mx.rpc.events.ResultEvent;
	import mx.rpc.remoting.mxml.RemoteObject;
	
	import org.puremvc.as3.interfaces.IProxy;
	import org.puremvc.as3.patterns.proxy.Proxy; 
	
	public class AnneeEtudeProxy extends Proxy implements IProxy 
	{ 
		
		public static const NAME : String = 'AnneeEtudeProxy';		
		public static const LISTE_ANNEES_ETUDE_OBTENUE : String = "ListeAnneesEtudeObtenue";
		public static const LISTE_ANNEES_UNIVERSITAIRE_ETUDE_OBTENUE : String = "ListeAnneesUniversitaireEtudeObtenue";
		public static const LISTE_FORMATIONS_OBTENUE : String = "ListeFormationsEtudeObtenue";
		public static const LISTE_ENSEIGNANTS_OBTENUE : String = "ListeEnseignantsEtudeObtenue";
		private var remoteObjectAnneeEtude : RemoteObject = null;
		private var remoteObjectAnneeUniversitaire : RemoteObject = null;
		private var remoteObjectFormation : RemoteObject = null;
		private var remoteObjectEnseignant : RemoteObject = null;
		
		/** 
		 * Constructor 
		 * We create the table logins and insert a login by default to test 
		 */ 
		public function AnneeEtudeProxy(data:Object=null) 
		{ 
			super(NAME, data);
			remoteObjectAnneeEtude = new RemoteObject();
			remoteObjectAnneeEtude.destination = "RemoteServiceAnneeEtude";
			remoteObjectAnneeEtude.source = "RemoteServiceAnneeEtude";
			remoteObjectAnneeEtude.endpoint = ApplicationFacade.SERVEUR;
			remoteObjectAnneeUniversitaire = new RemoteObject();
			remoteObjectAnneeUniversitaire.destination = "RemoteServiceAnneeUniversitaire";
			remoteObjectAnneeUniversitaire.source = "RemoteServiceAnneeUniversitaire";
			remoteObjectAnneeUniversitaire.endpoint = ApplicationFacade.SERVEUR;
			remoteObjectFormation = new RemoteObject();
			remoteObjectFormation.destination = "RemoteServiceFormation";
			remoteObjectFormation.source = "RemoteServiceFormation";
			remoteObjectFormation.endpoint = ApplicationFacade.SERVEUR;
			remoteObjectEnseignant = new RemoteObject();
			remoteObjectEnseignant.destination = "RemoteServiceEnseignant";
			remoteObjectEnseignant.source = "RemoteServiceEnseignant";
			remoteObjectEnseignant.endpoint = ApplicationFacade.SERVEUR;
		} 

 		public function validerAjoutAnneeEtude(anneeEtude:AnneeEtude,formation:Formation,responsable:Enseignant):void
		{
			remoteObjectAnneeEtude.addEventListener(ResultEvent.RESULT, listeAnneesEtudeObtenue);
			remoteObjectAnneeEtude.addEventListener(FaultEvent.FAULT, onFault);
 			remoteObjectAnneeEtude.ajouterAnneeEtude(anneeEtude,formation,responsable);
			trace("Ajout");
		}
		
		 public function validerModifAnneeEtude(anneeEtude:AnneeEtude,formation:Formation):void
		{
			remoteObjectAnneeEtude.addEventListener(ResultEvent.RESULT, listeAnneesEtudeObtenue);
			remoteObjectAnneeEtude.addEventListener(FaultEvent.FAULT, onFault);
 			remoteObjectAnneeEtude.modifierAnneeEtude(anneeEtude,formation);
			trace("Modification");
		}
		
		 public function supprimerAnneeEtude(anneeEtude:AnneeEtude,formation:Formation,anneeUniversitaire:AnneeUniversitaire):void
		{
			remoteObjectAnneeEtude.addEventListener(ResultEvent.RESULT, listeAnneesEtudeObtenue);
			remoteObjectAnneeEtude.addEventListener(FaultEvent.FAULT, onFault);
 			remoteObjectAnneeEtude.supprimerAnneeEtude(anneeEtude,formation,anneeUniversitaire);
			trace("Suppression");
		}

	 	public function obtenirListeAnneesEtude(anneeUniversitaire:AnneeUniversitaire,formation:Formation) : void 
 		{
 			remoteObjectAnneeEtude.addEventListener(ResultEvent.RESULT, listeAnneesEtudeObtenue);
			remoteObjectAnneeEtude.addEventListener(FaultEvent.FAULT, onFault);
 			remoteObjectAnneeEtude.obtenirListeAnneesEtude(anneeUniversitaire,formation);
 		}
 		
 		public function obtenirListeAnneesUniversitaire() : void 
 		{
 			remoteObjectAnneeUniversitaire.addEventListener(ResultEvent.RESULT, listeAnneesUniversitaireObtenue);
			remoteObjectAnneeUniversitaire.addEventListener(FaultEvent.FAULT, onFault);
 			remoteObjectAnneeUniversitaire.obtenirListeAnneesUniversitaire();
 		}
 		
 		public function obtenirListeFormations() : void 
 		{
 			remoteObjectFormation.addEventListener(ResultEvent.RESULT, listeFormationsObtenue);
			remoteObjectFormation.addEventListener(FaultEvent.FAULT, onFault);
 			remoteObjectFormation.obtenirListeFormations();
 		}
 		
 		public function obtenirListeEnseignants(anneeUniversitaire:AnneeUniversitaire,formation:Formation) : void 
 		{
 			remoteObjectEnseignant.addEventListener(ResultEvent.RESULT, listeEnseignantsObtenue);
			remoteObjectEnseignant.addEventListener(FaultEvent.FAULT, onFault);
 			remoteObjectEnseignant.obtenirListeEnseignants(anneeUniversitaire,formation);
 		}
 		
 		private function listeAnneesEtudeObtenue(event:ResultEvent):void
		{
			remoteObjectAnneeEtude.removeEventListener(ResultEvent.RESULT, listeAnneesEtudeObtenue);
			var listeAnneesEtude:Array = (event.result as Array)
			sendNotification(LISTE_ANNEES_ETUDE_OBTENUE, listeAnneesEtude);
		}
		
		private function listeAnneesUniversitaireObtenue(event:ResultEvent):void
		{
			remoteObjectAnneeUniversitaire.removeEventListener(ResultEvent.RESULT, listeAnneesUniversitaireObtenue);
			var listeAnneesUniversitaire:Array = (event.result as Array)
			sendNotification(LISTE_ANNEES_UNIVERSITAIRE_ETUDE_OBTENUE, listeAnneesUniversitaire);
		}
		
		private function listeFormationsObtenue(event:ResultEvent):void
		{
			remoteObjectFormation.removeEventListener(ResultEvent.RESULT, listeFormationsObtenue);
			var listeFormations:Array = (event.result as Array)
			sendNotification(LISTE_FORMATIONS_OBTENUE, listeFormations);
		}
		
		private function listeEnseignantsObtenue(event:ResultEvent):void
		{
			remoteObjectEnseignant.removeEventListener(ResultEvent.RESULT, listeEnseignantsObtenue);
			var listeEnseignants:Array = (event.result as Array)
			sendNotification(LISTE_ENSEIGNANTS_OBTENUE, listeEnseignants);
		}
		
		private function onFault(event:FaultEvent):void
		{
			trace("Fault");			
		}

	}
}